package com.dave.gd.core.base.entity.impl;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import com.dave.gd.common.log.ILogger;
import com.dave.gd.common.log.LoggerFactory;
import com.dave.gd.core.base.entity.IBaseEntityMeta;

public class BaseEntityMeta implements IBaseEntityMeta, Serializable {
    private static final long serialVersionUID = 1L;
    private static final ILogger LOGGER = LoggerFactory.getLogger(BaseEntityMeta.class);
    
    /**
     * 打印类字段信息
     */
    @Override
    public String toString() {
        Field[] fields = this.getClass().getDeclaredFields();
        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (Field f : fields) {
            if (Modifier.isStatic(f.getModifiers()) || Modifier.isFinal(f.getModifiers())) {
                continue;
            }
            Object value = null;
            try {
                f.setAccessible(true);
                value = f.get(this);
            } catch (IllegalArgumentException e) {
                LOGGER.error(BaseEntityMeta.class.getName(), e);
            } catch (IllegalAccessException e) {
                LOGGER.error(BaseEntityMeta.class.getName(), e);
            }
            if (value != null) {
                sb.append(f.getName()).append('=').append(value).append(',');
            }
        }
        sb.append(']');
        
        return sb.toString();
    }
    
    // 去除通用设计，修改App*mybatis,去除com.ivan.common.base.mapper,需要启用下面的方式，
    // @Override
    // public String getDeleteMeth() {
    // return Constants.DEFALUT_MAPPER + "." + this.getClass().getSimpleName() +
    // "Mapper.delete";
    // }
    //
    // @Override
    // public String getInsertMeth() {
    // return Constants.DEFALUT_MAPPER + "." + this.getClass().getSimpleName() +
    // "Mapper.insert";
    // }
    //
    // @Override
    // public String getUpdateMeth() {
    // return Constants.DEFALUT_MAPPER + "." + this.getClass().getSimpleName() +
    // "Mapper.update";
    // }
    //
    // @Override
    // public String getObjectByMapMeth() {
    // return Constants.DEFALUT_MAPPER + "." + this.getClass().getSimpleName()
    // + "Mapper.getObjectByMap";
    // }
    //
    // @Override
    // public String getObjectListByMapMeth() {
    // return Constants.DEFALUT_MAPPER + "." + this.getClass().getSimpleName()
    // + "Mapper.getObjectListByMap";
    // }
    //
    // @Override
    // public String getPageInfoByMapMeth() {
    // return Constants.DEFALUT_MAPPER + "." + this.getClass().getSimpleName()
    // + "Mapper.getPageInfoByMap";
    // }
    @Override
    public String getDeleteMeth() {
        //        return "com.ctg.itrdc.core.domain.base.mapper.BaseEntityMapper.delete";
        //根据mybatis的特性修改该方法
        return this.getClass().getName().replaceAll(".entity.", ".mapper.") + "Mapper.delete";
    }
    
    @Override
    public String getInsertMeth() {
        return this.getClass().getName().replaceAll(".entity.", ".mapper.") + "Mapper.insert";
    }
    
    @Override
    public String getUpdateMeth() {
        return this.getClass().getName().replaceAll(".entity.", ".mapper.") + "Mapper.update";
    }
    
    @Override
    public String getObjectByMapMeth() {
        return this.getClass().getName().replaceAll(".entity.", ".mapper.")
            + "Mapper.getObjectByMap";
    }
    
    @Override
    public String getObjectListByMapMeth() {
        return this.getClass().getName().replaceAll(".entity.", ".mapper.")
            + "Mapper.getObjectListByMap";
    }
    
    @Override
    public String getPageInfoByMapMeth() {
        return this.getClass().getName().replaceAll(".entity.", ".mapper.")
            + "Mapper.getPageInfoByMap";
    }
}
